package com.itheima.reggie.controller;

import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.User;
import com.itheima.reggie.service.UserService;
import com.itheima.reggie.utils.SMSUtils;
import com.itheima.reggie.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Map;

@RequestMapping("/user")
@RestController
public class UserController {
    
    @Autowired
    private UserService userService;
    
    /**
     * 登录
     * @param map
     * @return
     */
    @PostMapping("/login")
    public R login(@RequestBody Map<String , String> map , HttpSession session){
        System.out.println("map = " + map);
        
        //1. 取出手机号和验证码
        String phone = map.get("phone");
        String code = map.get("code");
        
        //2. 校验验证码是否正确！
        String valCode = (String) session.getAttribute(phone);
        
        
        //2.1 如果验证码一样，就认为登录成功了！
        if(valCode.equalsIgnoreCase(code)){
            
            //2.2. 拿着手机号码去查询数据库，看看有没有这个用户存在
            User user = userService.findUser(phone);
            
            //2.2.1 判断有没有用户
            if(user == null){
                
                //2.2.2 表示这个用户是第一次来，要保存到数据库里面。
                user = new User();
                user.setPhone(phone);
                user.setStatus(1);
                
                userService.add(user);
            }
            
            //2.3 把用户对象保存到session作用域
            session.setAttribute("user" , user);
    
    
            return R.success("登录成功！");
        }
        return R.error("登录失败！");
    }
    
    /**
     * 获取验证
     * @param phone
     * @param session
     * @return
     */
    @GetMapping("/smscode")
    public R sendSmsCode(String phone , HttpSession session){
        
        //1. 生成验证码
        String code = ValidateCodeUtils.generateValidateCode4String(6);
        System.out.println("code=" + code); //1234
    
        //2. 真实的场景： 给手机号发短信
        //SMSUtils.sendMessage("签名", "模板" , phone  , code );
        
        //3. 为了能够去校验一会登录传递上来的验证码是否正确，需要把这个验证码保存到session作用域
        session.setAttribute( phone , code);
        
        //4. 返回
        return R.success(code);
        
    }
}
